知らなかった事を後悔した。既存のリソースからCloudFormationのテンプレート生成 Former2 の紹介 #reinvent 2019
What’s New in AWS CloudFormation を聴講した際にCloudFormationのImportの機能で、既存の環境に適用しようとした場合、既存のリソースに合わせた設定値のテンプレートを作成して設定値をすり合わせる作業が必要になってくるので若干躊躇してました。
ただここは、ラスベガス現地参加の強み!ということで スピーカーに弊社メンバーで疑問を質問しにいってみました。Let's Ask the Speaker!
https://dev.classmethod.jp/cloud/aws/cloud-formation-dop408/
Q: 永遠にベータのCloudFormerはいつアップデートされるんですか? A: よく聞いてくれたね笑 残念ながらCloudFormarがこれからアップデートされることはありません。サードパーティ製のFormer2というWebベースのサービスがあるのですが、これが非常によくできているのでそれを使ってください。
で、半信半疑でしたが、Former2をやってみたので、レポートします。 控えめに言って、いや、もうレポートするので実際に試してほしいです。 AWSの全てのリソースという訳にはいかないですが、主要なリソースは網羅されており、というか全部みきれてません。ECS,EKSもあります。 生成されるテンプレートですが、CloudFormationだけでなく、Terraform, CDK(TypeScript)まであります。 どうしていままで、このツールを知らなかったんだろうと後悔しました。
Former2とは
https://github.com/iann0036/former2
Generate CloudFormation / Terraform / Troposphere templates from your existing AWS resources
ブラウザベースのWebサービス(APP)となりますが、AWSの認証情報を使用して(サーバを経由せずにJavascriptのSDKから直接AWSのエンドポイントへAPIコールしているようです) 既存のAWSのリソース情報を取得し、CloudFormation, Terraform, Troposphere のテンプレートを生成します。
英文では簡単に1行ですが、必要十分でこれが大変なんですよね。 そして、試してみるとアウトプットには、CDK(TypeScript), Raw Output (Debug) まで、いけそうということで、Raw Output (Debug) を変換すれば、エクセルにもだせそうという勝手な夢をみかけてます。
もう待ちきれないので、やってみました。
やってみた
0. Former2 のWebサイトにアクセスします
1. Introduction
- 左手のメニューより
Setup
を選択します Introduction
を選択します。- 内容を確認しChrome またはFirefoxの拡張をインストールします。
Continue to Credentials
を選択して進みます。
※補足 こちらのブラウザ拡張はアクセスしているサイト(former2.com)とは別のAWSのサービスのエンドポイントにJavascript経由でアクセスすることになるのでCORSのエラーを回避するために導入しているようです。
2. Credentials
2.0 事前準備
- ReadOnlyAccess のIAMRole、もしくはIAMユーザを準備して認証情報を取得しておきます
- ※注意 こちらの認証情報を用いてアクセスしますので、ReadOnlyAccessまた、テンプレートを生成したいリソースに限った権限を設定することを強くお勧めします。
2.1. IAM credentials (認証情報)を設定します。
- Access Key を設定します。
- Secret Access Key を設定します。
- オプション Session Token を設定します。
- オプション Assume Roleを設定します。(ロールを用いたアクセスの際にはこちらを設定してください
Continue to Parameters
を選択して進みます。
3. Parameters
- 特に必要なパラメータがない場合、設定せずに次にすすみます。
Continue to Settings
を選択して進みます。
※補足 設定した値が存在した場合、入力パラメータとしてテンプレート作成時に置き換えられるようです。
4. Settings
- 特に必要ななければ、設定せずに次にすすみます。
Go to Dashboard
を選択してDashboard
へ進みます。
以下、各項目の説明です
- Account Scanning
- 設定した認証のアカウントのリソースを全スキャンします。積極的にじっしする必要はないですが、関連するリソースの提案が欲しい場合は(複数のリソースのテンプレートを生成する場合)は必要です。
- CloudFormation Spacing
- テンプレート生成の際のスペース(段組み)の数です
- Related Resources
- 関連するリソースを含む場合はオンにします
- Experimental Features
- 全リソースを生成対象にします(非推奨)
テンプレートを生成してみる
- もう直感的にわかると思いますが、Dashboardよりリソースを選択すると該当のリソース一覧が表示されます。(EC2で進めます)
EC2 のテンプレートを生成
- 一覧から生成したいインスタンスを選択して
(+)Add Selected
を押下します
- 上の
Generate
ボタンを選択すると、テンプレートが生成されます。
生成されるテンプレートサンプル
AWSTemplateFormatVersion: "2010-09-09" Metadata: Generator: "former2" Description: "" Resources: ec20222XXXXX: Type: "AWS::EC2::Instance" Properties: ImageId: "ami-XXXXXXXXXXXXX" InstanceType: "t3.micro" KeyName: "ec2" AvailabilityZone: !Sub "${AWS::Region}a" Tenancy: "default" SubnetId: "subnet-XXXXXXX" EbsOptimized: false SecurityGroupIds: - "sg-020badXXXXXXX" SourceDestCheck: true BlockDeviceMappings: - DeviceName: "/dev/xvda" Ebs: Encrypted: false VolumeSize: 8 SnapshotId: "snap-0619f2XXXXXXXX" VolumeType: "gp2" DeleteOnTermination: true Tags: - Key: "RsGroup" Value: "test"
CloudFormation Importしてみた(割愛)
- 生成されたテンプレートに
DeletionPolicy:Retain
を追加して、インポートします。 - 本日時点では、EC2リソースは特に問題なくインポートされ、ドリフト検出してもSync状態でした。
- リソースにより完全におなじという保証はできませんので、詳細は割愛します。
Type: "AWS::EC2::Instance" DeletionPolicy: Retain <=== を追加
まとめ
本来なら各リソースの生成また検証をして、ご紹介するのが流れなのですが はやくFormer2の紹介したかったのが実状です。 また、オープンソースでもありますので、もし不具合等あれば、フィードバックまた セキュリティの懸念や今後サーバ負荷があがることも予測されますので、ご自身のサーバでのホスティングすることもお勧めします。
CloudFormationのテンプレートだけでなく、CDK, Terraformもサポートされてますので、IaCが加速しそうです。 気になった方は、ぜひぜひ、検証してみてください。